#include <iostream>
using namespace std;

/**
 * 多态
*/

class Parent{
    public:
        // 虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时，会告诉编译器不要静态链接到该函数。
        virtual void print(){
            cout << "Parent print() Call" << endl;
        }
        // = 0 告诉编译器，函数没有主体，这个是纯虚函数
        // virtual void print() = 0;
};

class Children1:public Parent{
    public:
        void print(){
            cout << "Children1 print() Call" << endl;
        }
};

class Children2:public Parent{
    public:
        void print(){
            cout << "Children2 print() Call" << endl;
        }
};

void print(Parent* p){
    p->print();
}

int main( )
{
    Parent p;
    Children1 ch1;
    Children2 ch2;

    // Parent print() Call
    print(&p);
    // Children1 print() Call
    print(&ch1);
    // Children2 print() Call
    print(&ch2);
}